import config from './WebIMConfig.JS';
import WebIM from 'easemob-websdk';
import vue from '../main'


WebIM.config = config;
WebIM.conn = new WebIM.connection({
    appKey: WebIM.config.appkey,
    isHttpDNS: WebIM.config.isHttpDNS,
    isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
    https: WebIM.config.https,
    url: WebIM.config.socketServer,
    apiUrl: WebIM.config.restServer,
    isAutoLogin: WebIM.config.isAutoLogin,
    autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
    heartBeatWait: WebIM.config.heartBeatWait,
    delivery: WebIM.config.delivery,
    deviceId: WebIM.config.deviceId,
    isDebug: WebIM.config.isDebug,
    useOwnUploadFun: WebIM.config.useOwnUploadFun

})

WebIM.conn.listen({
    onOpened: function () {
        // console.log("接成功回调 ");
    },                  //连接成功回调 
    onClosed: function () { },                  //连接关闭回调
    onTextMessage: function (message) {
        console.log(message);
    },    //收到文本消息
    onEmojiMessage: function (message) {
        console.log(message);
    },   //收到表情消息
    onPictureMessage: function (message) {
        console.log(message);
    }, //收到图片消息
    onCmdMessage: function (message) {
        console.log(message);
    },     //收到命令消息
    onAudioMessage: function (message) {
        console.log(message);
    },   //收到音频消息
    onLocationMessage: function (message) {
        console.log(message);
    },//收到位置消息
    onFileMessage: function (message) { console.log(message); },    //收到文件消息
    onCustomMessage: function (message) { console.log(message); },  //收到自定义消息
    onVideoMessage: function (message) {
        var node = document.getElementById('privateVideo');
        var option = {
            url: message.url,
            headers: {
                'Accept': 'audio/mp4'
            },
            onFileDownloadComplete: function (response) {
                var objectURL = WebIM.utils.parseDownloadResponse.call(WebIM.conn, response);
                node.src = objectURL;
            },
            onFileDownloadError: function () {
                console.log('File down load error.')
            }
        };
        WebIM.utils.download.call(WebIM.conn, option);
    },   //收到视频消息
    onPresence: function (message) { console.log(message); },       //处理“广播”或“发布-订阅”消息，如联系人订阅请求、处理群组、聊天室被踢解散等消息
    onRoster: function (message) { console.log(message); },         //处理好友申请
    onInviteMessage: function (message) { console.log(message); },  //处理群组邀请
    onOnline: function () { },                  //本机网络连接成功
    onOffline: function () { },                 //本机网络掉线
    onError: function (message) { console.log(message); },          //失败回调
    onBlacklistUpdate: function (list) {       //黑名单变动
        // 查询黑名单，将好友拉黑，将好友从黑名单移除都会回调这个函数，list则是黑名单现有的所有好友信息
        console.log(list);
    },
    onRecallMessage: function (message) { console.log(message); },      //收到撤回消息回调
    onReceivedMessage: function (message) { console.log(message); },    //收到消息送达服务器回执
    onDeliveredMessage: function (message) { console.log(message); },   //收到消息送达客户端回执
    onReadMessage: function (message) { console.log(message); },        //收到消息已读回执
    onCreateGroup: function (message) { console.log(message); },        //创建群组成功回执（需调用createGroupNew）
    onMutedMessage: function (message) { console.log(message); },       //如果用户在A群组被禁言，在A群发消息会走这个回调并且消息不会传递给群其它成员
    onChannelMessage: function (message) { console.log(message); }      //收到整个会话已读的回执，在对方发送channel ack时会在这个回调里收到消息
});

WebIM.conn.addEventHandler("contactEvent", {
    // 当前用户收到好友请求。用户 B 向用户 A 发送好友请求，用户 A 收到该事件。
    onContactInvited: function (msg) {
        console.log(msg, 'onContactInvited');
        // 将信息添加到申请列表
        if (msg.from && msg.status) {
            vue.$store.dispatch('updateFriendsApply', {
                id: msg.from,
                text: msg.status
            }),
                vue.$store.commit('hasMesg'),
                vue.$store.commit('addCount')
        }
    },
    // 当前用户被其他用户从联系人列表上移除。用户 B 将用户 A 从联系人列表上删除，用户 A 收到该事件。
    onContactDeleted: function (msg) {
        console.log(msg, 'onContactDeleted');
    },
    // 当前用户新增了联系人。用户 B 向用户 A 发送好友请求，用户 A 同意该请求，用户 A 收到该事件，而用户 B 收到 `onContactAgreed` 事件。
    onContactAdded: function (msg) {
        console.log(msg, 'onContactAdded');
        // 修改通讯录列表
        if (msg.type === 'subscribed') {
            vue.$store.dispatch('updateFriendsList', {
                id: msg.from,
            })
        }
    },
    // 当前用户发送的好友请求被拒绝。用户 A 向用户 B 发送好友请求，用户 B 收到好友请求后，拒绝加好友，则用户 A 收到该事件。
    onContactRefuse: function (msg) {
        console.log(msg, 'onContactRefuse');
        // 收到拒绝通知
        if (msg.type === 'unsubscribed') {
            vue.$store.dispatch('refuseFriendsList', msg.from)
        }
    },
    // 当前用户发送的好友请求经过了对方同意。用户 A 向用户 B 发送好友请求，用户 B 收到好友请求后，同意加好友，则用户 A 收到该事件。
    onContactAgreed: function (msg) {
        console.log(msg, 'onContactAgreed');
        // 修改通讯录列表
        if (msg.type === 'subscribed') {
            vue.$store.dispatch('updateFriendsList', {
                id: msg.from,
            })
            // 并收到同意通知
            vue.$store.dispatch('agreeFriendsList', msg.from)
        }
    },

    onPresence: function (msg) {
    },

    onGroupEvent: function (msg) {
        console.log(msg);
        // msg.id :组id
        // msg.from :谁创建的群组
        // msg.operation 创建成功时, 所有组成员都会收到 "memberPresence"事件
        if (msg.operation == "memberPresence") {
            vue.$store.commit("setCreateGroupAcceptNews", {
                newGroupId: msg.id,
                newGroupOwner: msg.from
            })
        }
    }
});

export default WebIM;